]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
gdm: Don't try answering query if the user verifier has been deleted
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Mon, 1 Feb 2021 15:42:21 +0000 (16:42 +0100)
committerMarge Bot <marge-bot@gnome.org>
Fri, 12 Feb 2021 20:26:00 +0000 (20:26 +0000)
Answering a query may be delayed to the moment in which we've not any
more messages in the queue, however this case can also happen just after
we've cleared the UserVerifier and in such case we'd have nothing to
answer, but we currently throw an error:

    JS ERROR: Exception in callback for signal: no-more-messages:
      TypeError: this._userVerifier is null
    answerQuery/signalId<@resource:///org/gnome/shell/gdm/util.js:249:17
    _emit@resource:///org/gnome/gjs/modules/core/_signals.js:133:47
    finishMessageQueue@resource:///org/gnome/shell/gdm/util.js:266:14
    _clearMessageQueue@resource:///org/gnome/shell/gdm/util.js:301:14
    clear@resource:///org/gnome/shell/gdm/util.js:223:14
    cancel@resource:///org/gnome/shell/gdm/util.js:205:18
    reset@resource:///org/gnome/shell/gdm/authPrompt.js:482:32
    cancel@resource:///org/gnome/shell/gdm/authPrompt.js:569:14
    vfunc_key_press_event@resource:///org/gnome/shell/gdm/authPrompt.js:128

So handle this case more gracefully keeping track of the current
cancellable and checking whether it is still valid before trying to answer
a query or do a delayed action.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1622>

js/gdm/util.js

index 54cd3463113313d45dea97276bd83fa8fcf417bc..048e2bf5e21badeaea0ce07527c332137f9ab5ff 100644 (file)
@@ -260,9 +260,11 @@ var ShellUserVerifier = class {
         if (!this.hasPendingMessages) {
             this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
         } else {
+            const cancellable = this._cancellable;
             let signalId = this.connect('no-more-messages', () => {
                 this.disconnect(signalId);
-                this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
+                if (!cancellable.is_cancelled())
+                    this._userVerifier.call_answer_query(serviceName, answer, cancellable, null);
             });
         }
     }
@@ -583,9 +585,10 @@ var ShellUserVerifier = class {
             if (!this.hasPendingMessages) {
                 this._retry();
             } else {
+                const cancellable = this._cancellable;
                 let signalId = this.connect('no-more-messages', () => {
                     this.disconnect(signalId);
-                    if (this._cancellable && !this._cancellable.is_cancelled())
+                    if (!cancellable.is_cancelled())
                         this._retry();
                 });
             }
@@ -594,9 +597,11 @@ var ShellUserVerifier = class {
             if (!this.hasPendingMessages) {
                 this._cancelAndReset();
             } else {
+                const cancellable = this._cancellable;
                 let signalId = this.connect('no-more-messages', () => {
                     this.disconnect(signalId);
-                    this._cancelAndReset();
+                    if (!cancellable.is_cancelled())
+                        this._cancelAndReset();
                 });
             }
         }